Eloquent ORM 提供了簡潔的實作和資料庫互動,每個table都有一個對應的 "Model" 可以跟table互動,在做完前面DB的設定以後[Entity / DB簡介],就可以使用。
可以把Eloquent Model想像成一個更方便的Query Builder,所以任何query builder可以操作的方法它都可以使用
<?php
//取回全部資料
$flights = App\Flight::all();
foreach ($flights as $flight) {
echo $flight->name;
}
//下條件取回資料
$flights = App\Flight::where('active', 1)
->orderBy('name', 'desc')
->take(10)
->get();
在比較新的版本中有提供 fresh
和 refresh
方法可以使用
//fresh
$flight = App\Flight::where('number', 'FR 900')->first();
$freshFlight = $flight->fresh();
//refresh
$flight = App\Flight::where('number', 'FR 900')->first();
$flight->number = 'FR 456';
$flight->refresh();
$flight->number; // "FR 900"
// 用primary key取回model
$flight = App\Flight::find(1);
// 取回第一個符合條件的model
$flight = App\Flight::where('active', 1)->first();
find 還可以使用array,例如: find([1, 2, 3]);
$model = App\Flight::findOrFail(1);
$model = App\Flight::where('legs', '>', 100)->firstOrFail();
會回傳404 HTTP response
laravel 提供了很多collection的方法可以使用,舉幾個常用的例子
遍歷整個集合並將每一個數值傳入給定的回呼函式。回呼函式可以任意修改並回傳項目,於是形成修改過的項目組成的新集合
$data = $products->map(function ($product) use ($inventories) {
return [
'id' => $product->id,
'name' => $product->name,
'inventory' => $inventories[$product->id],
'created_at' => Carbon::parse($product->created_at)->toDateTimeString(),
'updated_at' => Carbon::parse($product->updated_at)->toDateTimeString(),
];
});
當然,這些也可以用foreach達到一樣的效果
foreach ($products as $product) {
$data[] = [
'id' => $product->id,
'name' => $product->name,
'inventory' => $inventories[$product->id],
'created_at' => Carbon::parse($product->created_at)->toDateTimeString(),
'updated_at' => Carbon::parse($product->updated_at)->toDateTimeString(),
];
}
map 並不會修改原本的集合,而是生成一個 "新的" 集合,因此如果想改動原本的集合需要用 transform
會用指定的key把結果做分類
$collection = collect([
['product_id' => 'prod-100', 'name' => 'desk'],
['product_id' => 'prod-200', 'name' => 'chair'],
]);
$keyed = $collection->keyBy('product_id');
$keyed->all();
出來的結果
[
'prod-100' => ['product_id' => 'prod-100', 'name' => 'Desk'],
'prod-200' => ['product_id' => 'prod-200', 'name' => 'Chair'],
]
其他有很多跟query builder很像的操作,如果有興趣的話可以去官網看看。